In functional programming there are these types called Monad and Monoid that let you build very complex things in a non-complex and composable way. This section will reinvent these two types from bottom up.
Monad
Monoid